#include <stdio.h>
#include <math.h>
#include "affichage.h"






int main()
{
	char nomFichier[50];
	int rep;
	int memoire, typeFichier, algorithme, affichage, affvilles, affroutes;
	int longsol;
	FILE* f;
	Graphe g;
	Arete* solution;
    SDL_Surface *ecran;


	/* Demande a l'utilisateur de ses preferences */
	printf("\nIndiquez si vous souhaitez conserver les parametres de la derniere utilisation\n(1 pour oui, 0 pour non) :\n");
	scanf("%d", &rep);
	while ((rep != 1) && (rep != 0))
	{
		printf("\nSaisie erronee, recommencez :\n");
		scanf("%d", &rep);
	}
	memoire = rep;

	if (memoire == 0)
	{
		f = fopen("data/preferences.txt", "w");

		printf("\nIndiquez le nom du fichier contenant les donnees de votre probleme :\n");
		scanf("%50s", nomFichier);
		fprintf(f, "Nom du fichier : %s\n", nomFichier);

		printf("\nIndiquez le type de votre fichier\n(1 ou 2, voir README pour plus de precisions) :\n");
		scanf("%d", &rep);
		while ((rep != 1) && (rep != 2))
		{
			printf("\nSaisie erronee, recommencez :\n");
			scanf("%d", &rep);
		}
		typeFichier = rep;
		fprintf(f, "Type de fichier : %d\n", rep);

		if (typeFichier == 2)
		{
			printf("\nIndiquez le type d'algorithme que vous souhaitez utiliser pour la completion\n");
			printf("(1 pour les distances euclidiennes, 2 pour le plus court chemin) :\n");
			scanf("%d", &rep);
			while ((rep != 1) && (rep != 2))
			{
				printf("\nSaisie erronee, recommencez :\n");
				scanf("%d", &rep);
			}
			algorithme = rep;
			fprintf(f, "Algorithme : %d\n", algorithme);

		}
		else
		{
			algorithme = 2;
			fprintf(f, "Algorithme : %d\n", algorithme);
		}


		printf("\nSouhaitez-vous un affichage graphique ?\n(1 pour oui, 0 pour non) :\n");
		scanf("%d", &rep);
		while ((rep != 1) && (rep != 0))
		{
			printf("\nSaisie erronee, recommencez :\n");
			scanf("%d", &rep);
		}
		affichage = rep;
		fprintf(f, "Affichage graphique : %d\n", affichage);


		if (affichage == 1)
		{
			if (typeFichier == 2)
			{
				printf("\nPrecisez si vous preferez un affichage des villes de type \"naturel\", \"lattice\" ou \"circulaire\"\n");
				printf("(1 pour le \"naturel\", 2 pour le \"lattice\", 3 pour le \"circulaire\") :\n");
				scanf("%d", &rep);
				while ((rep != 1) && (rep != 2)  && (rep != 3))
				{
					printf("\nSaisie erronee, recommencez :\n");
					scanf("%d", &rep);
				}
				affvilles = rep;
				fprintf(f, "Affichage des villes : %d\n", affvilles);
			}
			else
			{
				printf("\nPrecisez si vous preferez un affichage des villes de type \"lattice\" ou \"circulaire\"\n");
				printf("(2 pour le \"lattice\", 3 pour le \"circulaire\") :\n");
				scanf("%d", &rep);
				while ((rep != 3) && (rep != 2))
				{
					printf("\nSaisie erronee, recommencez :\n");
					scanf("%d", &rep);
				}
				affvilles = rep;
				fprintf(f, "Affichage des villes : %d\n", affvilles);
			}

			printf("\nPrecisez si vous souhaitez que soit represente le cout des routes\n");
			printf("(1 pour oui, 0 pour non) :\n");
			scanf("%d", &rep);
			while ((rep != 1) && (rep != 0))
			{
				printf("\nSaisie erronee, recommencez :\n");
				scanf("%d", &rep);
			}
			affroutes = rep;
			fprintf(f, "Affichage des routes : %d", affroutes);
		}
		
		fclose(f);
	}

	else
	{
		f = fopen("data/preferences.txt", "r");
		fscanf(f, "Nom du fichier : %s\n", nomFichier);
		fscanf(f, "Type de fichier : %d\n", &typeFichier);
		fscanf(f, "Algorithme : %d\n", &algorithme);
		fscanf(f, "Affichage graphique : %d\n", &affichage);
		fscanf(f, "Affichage des villes : %d\n", &affvilles);
		fscanf(f, "Affichage des routes : %d", &affroutes);
		fclose(f);
	}


	/* Chargement du graphe de travail */
	if (typeFichier == 1)
	{
		g = nouveauGrapheFichier1(nomFichier);
	}
	else
	{
		g = nouveauGrapheFichier2(nomFichier);
	}

	/* Completion */
	if (algorithme == 1)
	{
		completerEuclide(&g);
	}
	else
	{
		completerPCC(&g);
	}

	/* Calcul de la solution */
	if (algorithme == 1)
	{
		solution = kruskal(&g,&longsol);
	}
	else
	{
		solution = kruskal2(&g,&longsol);
	}

	/* Affichage de la solution */
	affichageSolutionTexte(&g,solution,longsol);

	if (affichage == 1)
	{
	    SDL_Init(SDL_INIT_VIDEO);

	    ecran = SDL_SetVideoMode(LARGEUR, HAUTEUR, 32, SDL_HWSURFACE);
	    SDL_WM_SetCaption("Arbres de Steiner", NULL);

	    SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 0xFF, 0xFF, 0xFF));

		SDL_Flip(ecran);

		affichageGraphe(&g, affvilles, affroutes, solution, longsol, ecran);
		SDL_Flip(ecran);
		pause();
	}

	free(solution);
	testamentGraphe(&g);
    SDL_Quit();

	return 0;
}
